#ifndef _DIC_HPP_
#define _DIC_HPP_

#include <utility>   
#include <unordered_map>
#include <map>
#include <fstream>
#include <string>
#include <stdlib.h>
#include "log.hpp"

namespace Word
{
const std::string defaultpath = "./dic.txt";

// 分割符。
const std::string sep = ":";

class Dic
{
    public:
        Dic(const std::string& path = defaultpath)
            :_path(path)
        {
            ;
        }
        ~Dic()
        {
            ;
        }
        void AddWord()
        {
            // 初始化时带上对应的文件名。
            std::ifstream in(_path);

            if(in.is_open() == false)
            {
                LogSpace::Logger::LogMessage(LogSpace::LogLevel::WARNING,"Open",1,LogSpace::log) << "Open Fail!";
                exit(1);
            }

            std::string Word;
            while(std::getline(in,Word))
            {
                int pos = Word.find(sep);

                if(pos == std::string::npos)
                {
                    continue;
                }
                
                // 如果遇到错误，直接continue，之后肯定还有别的字符。
                std::string english = Word.substr(0,pos);
                std::string chinese = Word.substr(pos + sep.size());

                if(english.empty() || chinese.empty())
                {
                    continue;
                }

                // std::cout << english << "             " << chinese << std::endl;

                _dic.emplace(english,chinese);
            }
            in.close();
        }
        std::string Translate(const std::string s)
        {
            // 先查看哈希表中是否存在该字符串，如果不存在贸然返回的话，可能返回值为空，出错之类的。
            // 查找返回的是迭代器。
            // 走到结尾说明没有了。
            std::unordered_map<std::string,std::string>::iterator it = _dic.find(s);

            if(it == _dic.end())
            {
                return "None";
            }

            // 走到这里了，说明肯定存在，直接返回。
            return it->second;
        }
    private:
        std::string _path;
        std::unordered_map<std::string,std::string> _dic;
};
}

#endif